<?php

require_once 'classes/Deplacement.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des Déplacements
 * 
 * @author Manixab Billy
 * @date 05.06.2012
 */

class SCdeplacement {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajoute un Déplacement
     * @param Deplacement unDeplacement un déplacement à ajouter
     * @return Deplacement un déplacement mémorisé
     */
    public function ajouter($unDeplacement) {
        $unDeplacementMemorise = null;
        try {
            
            $query =  $this->db->prepare("INSERT INTO deplacement " .
                   "(dateHeure, animal_id, loge_nom, batiment_nom) VALUES(:dateHeure, :animal_id, :loge_nom, :batiment_nom)");

            $query->execute(array(
                    'dateHeure'        => $unDeplacement->getDateHeure(),
                    'animal_id'        => $unDeplacement->getAnimal_id(),
                    'loge_nom'         => $unDeplacement->getLoge_nom(),
                    'batiment_nom'     => $unDeplacement->getBatiment_nom()
               ));
            $unDeplacementMemorise = $unDeplacement;
            $unDeplacementMemorise->setId($this->db->lastInsertId());
            
            $query->closeCursor();
        }
        catch(PDOException $e) {
            return new Message("Déplacement non ajouté: ".$e->getMessage());
        }
        return $unDeplacementMemorise;
    }
    
    /**
     * Methode permettant de modifier un déplacement
     * @param unDeplacement Deplacement à modifier
     * @return Message  
     */
    public function modifier($unDeplacementAModifier) {
        $unDeplacementModifie = null;
        try {
            $query = $this->db->prepare("UPDATE deplacement SET ".
                    "dateHeure = :dateHeure, animal_id = :animal_id, loge_nom = :loge_nom, ".
                    "batiment_nom = :batiment_nom WHERE id = :id");
            
            $query->execute(array(
                'id'                => $unDeplacementAModifier->getId(),
                'dateHeure'         => $unDeplacementAModifier->getDateHeure(),
                'animal_id'         => $unDeplacementAModifier->getAnimal_id(),
                'loge_nom'          => $unDeplacementAModifier->getLoge_nom(),
                'batiment_nom'      => $unDeplacementAModifier->getBatiment_nom()
            ));
            $query->closeCursor();
            $unDeplacementModifie = $unDeplacementAModifier;

            }
        catch(PDOException $e) {
            return new Message("Déplacement non modifié: ".$e->getMessage());
        }
        return $unDeplacementModifie;
    }
    
    /**
     * Methode permettant de supprimer un déplacement
     * @param int id du déplacement à supprimer
     * @return boolean L'etat de la suppression d'un déplacement
     */
    public function supprimer($idDeplacementASupprimer) {
        $unDeplacementSupprime = false;
        try{
            $query = $this->db->prepare("DELETE FROM deplacement WHERE id = :id");
            $query->execute(array(
                'id'        => $idDeplacementASupprimer
            ));
            
            $query->closeCursor();
            $unDeplacementSupprime = true;
            $message = new Message("Déplacement supprimé");
        }
        catch(PDOException $e){
            $message = new Message("Déplacement non supprimée: ".$e->getMessage());
        }
        return $unDeplacementSupprime;
    }
    
     /**
     * @param Deplacement de recherche sous forme d'objet Deplacement
     * @return un tableau d'objet Deplacement
     */
    public function lister($deplacementALister){
        try {
            $query = "SELECT * FROM deplacement ";
            $query_Where="WHERE";
            if ($deplacementALister != NULL) {
                if ($deplacementALister->getId() != NULL) {
                    $query_Where .= " id = '".$deplacementALister->getId()."' AND ";
                }
                if ($deplacementALister->getDateHeure() != NULL) {
                    $query_Where .= " dateHeure = '".$deplacementALister->getDateHeure()."' AND ";
                }
                if ($deplacementALister->getAnimal_id() != NULL) {
                    $query_Where .= " animal_id = '".$deplacementALister->getAnimal_id()."' AND ";
                }
                if ($deplacementALister->getLoge_nom() != NULL) {
                    $query_Where .= " loge_nom = '".$deplacementALister->getLoge_nom()."' AND ";
                }
                if ($deplacementALister->getBatiment_nom() != NULL) {
                    $query_Where .= " batiment_nom = '".$deplacementALister->getBatiment_nom()."' AND ";
                }
            }
        
            $query_Where = substr($query_Where,0,-5);
            $query .= $query_Where;
            
            $lesDeplacementsTrouves = null;
            $unDeplacementLu = null;
            $result=$this->db->query($query);
            
            while($row=$result->fetch()) {
                $unDeplacementLu = new Deplacement($row["id"], $row["dateHeure"], $row["animal_id"], $row["loge_nom"], $row["batiment_nom"]);
                $lesDeplacementsTrouves[] = $unDeplacementLu;
            }

        }
        catch(PDOException $e) {
            print($e->getMessage());
        }
        return $lesDeplacementsTrouves;
    }
    
} 
?>
